package at.renehollander.schnitzeljagd.activity; import android.Manifest; import android.annotation.TargetApi; import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; import android.util.Pair; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import at.renehollander.schnitzeljagd.application.SchnitzeljagdApplication; import at.renehollander.schnitzeljagd.util.ArrayUtil; import java8.util.stream.Collectors; import java8.util.stream.IntStreams; import java8.util.stream.StreamSupport; public class EntryActivity extends Activity { private static final List<String> NEEDED_PERMISSIONS = Arrays.asList( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.CAMERA ); private static final int PERMISSION_REQUEST_CODE = 0; private void accessGranted() { SchnitzeljagdApplication sa = (SchnitzeljagdApplication) getApplication(); sa.setup(); startActivity(new Intent(this, LoginActivity.class)); } @Override protected void onStart() { super.onStart(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { List<String> collect = StreamSupport.stream(NEEDED_PERMISSIONS).filter(s -> checkSelfPermission(s) != PackageManager.PERMISSION_GRANTED).collect(Collectors.toList()); String[] missingPermissions = collect.toArray(new String[collect.size()]); if (missingPermissions.length >= 1) { requestPermissions(missingPermissions, PERMISSION_REQUEST_CODE); } else { accessGranted(); } } else { accessGranted(); } } @Override @TargetApi(Build.VERSION_CODES.M) public void onRequestPermissionsResult(int requestCode, String[] permissionStrings, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissionStrings, grantResults); List<Pair<String, Integer>> permissions = ArrayUtil.mapArrayToPairList(permissionStrings, IntStreams.of(grantResults).boxed().toArray(Integer[]::new)); List<String> denied = new ArrayList<>(); for (Pair<String, Integer> permission : permissions) { if (permission.second == PackageManager.PERMISSION_DENIED) { denied.add(permission.first); } } if (denied.size() >= 1) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Please grant this app all needed permissions") .setCancelable(false) .setNeutralButton("Ok", (dialog, which) -> { requestPermissions(denied.toArray(new String[denied.size()]), PERMISSION_REQUEST_CODE); }); AlertDialog error = builder.create(); error.show(); } else { accessGranted(); } } }